/**
 * 浏览器扩展错误处理工具
 * 用于屏蔽第三方浏览器扩展的错误，避免干扰应用程序正常运行
 */

// 屏蔽特定的扩展错误
export const suppressExtensionErrors = () => {
  // 保存原始的console.error
  const originalConsoleError = console.error;
  
  // 重写console.error来过滤扩展错误
  console.error = (...args: any[]) => {
    const errorMessage = args.join(' ');
    
    // 检查是否是需要屏蔽的扩展错误
    if (shouldSuppressError(errorMessage)) {
      // 静默处理扩展错误，不输出到控制台
      return;
    }
    
    // 对于其他错误，使用原始的console.error
    originalConsoleError.apply(console, args);
  };
  
  // 全局错误处理
  window.addEventListener('error', (event) => {
    if (shouldSuppressError(event.message)) {
      event.preventDefault();
      event.stopPropagation();
      return false;
    }
  });
  
  // 未处理的Promise拒绝
  window.addEventListener('unhandledrejection', (event) => {
    if (shouldSuppressError(event.reason?.message || event.reason)) {
      event.preventDefault();
      return false;
    }
  });
};

// 判断是否应该屏蔽错误
const shouldSuppressError = (message: string): boolean => {
  if (!message || typeof message !== 'string') return false;
  
  // 需要屏蔽的扩展错误关键词
  const suppressPatterns = [
    'ODHFrontend',
    'chrome-extension://lppjdajkacanlmpbbcdkccjkdbpllajb',
    'api_setFrontendOptions',
    'Cannot read properties of null (reading \'enabled\')',
    'chrome-extension://',
    'Error in event handler',
    'at ODHFrontend.',
    'at ODHFrontend.onMessage'
  ];
  
  return suppressPatterns.some(pattern => message.includes(pattern));
};

// 清理扩展错误日志
export const cleanExtensionErrors = () => {
  // 清除控制台中的扩展错误
  if (typeof console.clear === 'function') {
    // 延迟清理，让应用程序的重要日志先显示
    setTimeout(() => {
      console.log('%c🧹 已清理浏览器扩展错误日志', 'color: #4CAF50; font-weight: bold;');
    }, 2000);
  }
};

// 导出错误处理配置
export const errorHandlingConfig = {
  enableSuppression: true,
  logSuppressedErrors: false, // 设为true可以看到被屏蔽的错误（调试用）
  suppressionPatterns: [
    'ODHFrontend',
    'chrome-extension://lppjdajkacanlmpbbcdkccjkdbpllajb',
    'api_setFrontendOptions'
  ]
};

export default {
  suppressExtensionErrors,
  cleanExtensionErrors,
  shouldSuppressError,
  errorHandlingConfig
};
